package br.gov.ms.tce.modelo.dao;

import java.io.Serializable;
import java.util.List;

/**
 * Interface com métodos padrões de persistência. 
 * @interface GenericDAO
 * @author Anderson Paulino
 * @date 27/05/2011
 *
 * @param <T>
 * @param <ID>
 */
public interface GenericDAO<T, ID extends Serializable> {
	  
	/**
	 * Carrega um objeto pelo seu identificador
	 * @param id
	 * @return
	 */
	T loadById(ID id);
	
	/**
	 * Persiste o objeto na fonte de dados
	 * @param entity
	 */
	void persist(T entity);
	
	/**
	 * Atualiza o objeto na fonte de dados
	 * @param entity
	 */
	void update(T entity);
	
	/**
	 * Remove o objeto da fonte de dados
	 * @param entity
	 */
	void delete(T entity);
	
	/**
	 * Carrega em uma lista todos os objetos
	 * @return
	 */
	List<T> loadAll();
	
	/**
	 * Carrega em uma lista todos os objetos
	 * @return
	 */
	List<T> loadAll(String order);
	
	/**
	 * Inicializa a Criteria
	 */
	void createCriteria();
	
	/**
	 * Obtém a lista de resultado da criteria;
	 * @return
	 */
	List<T> getResultList();	

}
